package ${packageStr};

import com.differ.jackyun.framework.component.basic.dto.PageInfo;
import com.differ.jackyun.frame.business.dao.ICommonDao;
import com.differ.jackyun.frame.business.dto.left.LeftTypeCountDTO;
import ${filterPackageStr}.${filterName};
import ${filterPackageStr}.${resultName};
import ${entityPackageStr}.${entityClassName};
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * ${entityDesc} - DAO
 *
 * @author ${author}
 * @since ${time}
 */
public interface ${className} extends ICommonDao<${filterName}, ${entityClassName}, ${resultName}> {

    /**
     * 批量新增
     *
     * @param entityList 实体数组
     * @return 成功数
     */
    @Override
    Integer batchAdd(@Param("entityList") List<${entityClassName}> entityList);

    /**
     * 批量更新
     *
     * @param entityList 实体数组
     * @return 成功数
     */
    @Override
    Integer batchUpdate(@Param("entityList") List<${entityClassName}> entityList);

    /**
     * 批量更新 - 重复数据
     * 描述：重复数据传一个实体就行
     *
     * @param ids    待更新ids
     * @param entity 待更新实体
     * @return 成功数
     * @author LiYuan
     * @date 2020/9/3 16:11
     */
    @Override
    Integer batchUpdateSingle(@Param("ids") Long[] ids, @Param("item") ${entityClassName} entity);

    /**
     * 批量逻辑删除
     *
     * @param ids 主键数组
     * @return 成功数
     */
    @Override
    Integer batchLogicDelete(@Param("ids") Long[] ids);

    /**
     * 批量删除
     *
     * @param ids 主键数组
     * @return 成功数
     */
    @Override
    Integer batchDelete(@Param("ids") Long[] ids);

    /**
     * 批量获取
     *
     * @param ids 主键数组
     * @return 实体数组
     */
    @Override
    List<${entityClassName}> list(@Param("ids") Long[] ids);

    /**
     * 批量根据条件获取实体
     *
     * @param filter 过滤条件
     * @return 实体List
     */
    @Override
    List<${entityClassName}> listByFilter(@Param("filter") ${filterName} filter);

    /**
     * 批量根据条件获取实体
     *
     * @param filter 过滤条件
     * @return 实体List
     */
    @Override
    Integer countByFilter(@Param("filter") ${filterName} filter);

    /**
     * 获取主页面信息
     *
     * @param filter   过滤条件
     * @param pageInfo 分页信息
     * @return 实体List
     */
    @Override
    List<${resultName}> listMain(@Param("filter") ${filterName} filter, @Param("pageInfo") PageInfo pageInfo);

    /**
     * 查询主页面数量
     *
     * @param filter 过滤条件
     * @return 数量
     */
    @Override
    Integer listCount(@Param("filter") ${filterName} filter);

    /**
     * 获取最大的no
     *
     * @return 最大no
     */
    @Override
    Integer getMaxNo();

    /**
     * 统计字段的数量
     *
     * @param fields 归类字段
     * @param filter 过滤条件
     * @return 字段的数量
     */
    @Override
    List<LeftTypeCountDTO> listFieldCount(@Param("fields") String[] fields, @Param("filter") ${filterName} filter);
}